package com.example.smartpark.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.smartpark.dto.AnnouncementDTO;
import com.example.smartpark.dto.AnnouncementQueryDTO;

/**
 * 公告Service接口
 */
public interface AnnouncementService {

    /**
     * 分页查询公告列表
     *
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    IPage<AnnouncementDTO> getAnnouncementPage(AnnouncementQueryDTO queryDTO);

    /**
     * 获取公告详情
     *
     * @param id 公告ID
     * @param userId 用户ID，用于记录阅读状态
     * @return 公告详情
     */
    AnnouncementDTO getAnnouncementById(Long id, Integer userId);

    /**
     * 创建公告
     *
     * @param announcementDTO 公告信息
     * @return 创建后的公告
     */
    AnnouncementDTO createAnnouncement(AnnouncementDTO announcementDTO);

    /**
     * 更新公告
     *
     * @param id 公告ID
     * @param announcementDTO 公告信息
     * @return 更新后的公告
     */
    AnnouncementDTO updateAnnouncement(Long id, AnnouncementDTO announcementDTO);

    /**
     * 删除公告
     *
     * @param id 公告ID
     * @return 是否成功
     */
    boolean deleteAnnouncement(Long id);

    /**
     * 更改公告状态
     *
     * @param id 公告ID
     * @param status 状态
     * @return 更新后的公告
     */
    AnnouncementDTO changeAnnouncementStatus(Long id, Integer status);

    /**
     * 管理员获取公告列表
     *
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    IPage<AnnouncementDTO> getAdminAnnouncementPage(AnnouncementQueryDTO queryDTO);
} 